Choosing the optimal Software architecture in the search space by considering quality criteria is beyond human capabilities and is very challenging. It is necessary to search the design space automatically to improve the existing architectural features. To do this, we can use search-based Software engineering approaches. In this study, we examine the methods of optimizing and evaluating Software architecture and provide a search-based method to improve the Reliability of Software architecture. The proposed method is based on the use of NSGA-II algorithm and genetic programming and the use of Software architecture Reliability tactics in it. In the proposed method, we optimize the Software architecture in two steps. First, we use the genetic programming algorithm to extract how to apply the Software architecture Reliability tactics, and in the next step, we use the NSGA_II algorithm to search for the optimal allocation of components to the hardware servers. To evaluate the proposed method, we use a reporting system case study. The results of applying the proposed optimization steps show that the Reliability of the whole system as well as most of its most frequent functionalities is improved.